//////////////////////////////////////////////////////////////////////////
//	Filename	:	IGameState.h
//
//	Author		:	Ramon Johannessen (RJ)
//
//	Purpose		:	Abstract Base Class for all game states
//////////////////////////////////////////////////////////////////////////

#ifndef IGAMESTATE_H
#define IGAMESTATE_H

#include "windows.h"

enum eInputReturnType {IRT_EXIT, IRT_CONTINUE, IRT_CHANGE_STATE, };

class IGameState
{
private:
	
	IGameState(const IGameState&);
	IGameState& operator= (const IGameState&);

public:

	IGameState() {};
	virtual ~IGameState() = 0 {}
	//////////////////////////////////////////////////////////////////////////
	//	Function	:	Update
	//
	//	Purpose		:	Any update code goes here, pure virtual, must be overwritten
	//////////////////////////////////////////////////////////////////////////
	virtual void Update(double dTimeStep) = 0;
	//////////////////////////////////////////////////////////////////////////
	//	Function	:	Render
	//
	//	Purpose		:	draw everything to the screen, pure virtual, must be overwritten
	//////////////////////////////////////////////////////////////////////////
	virtual void Render() = 0;
	//////////////////////////////////////////////////////////////////////////
	//	Function	:	Input
	//
	//	Purpose		:	Handle any user input, mouse or keyboard, pure virtual, must be overwritten
	//
	//	Return		:	true/false, false if we are exiting the game
	//////////////////////////////////////////////////////////////////////////
	virtual eInputReturnType Input(double elapsedTime, const POINT& mousePt) = 0;
	//////////////////////////////////////////////////////////////////////////
	//	Function	:	Enter
	//
	//	Purpose		:	When the state is first entered, execute this code, pure virtual, must be overwritten
	//////////////////////////////////////////////////////////////////////////
	virtual void Enter() = 0;
	//////////////////////////////////////////////////////////////////////////
	//	Function	:	Exit
	//
	//	Purpose		:	When the state exits, execute this code, pure virtual, must be overwritten
	//////////////////////////////////////////////////////////////////////////
	virtual void Exit() = 0;
};

#endif